﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.Data;
using System.Data.Linq;
using System.Web.UI.WebControls;
using Emporium_Web.Enums;
using Emporium_Web.DBML;

namespace Emporium_Web
{
    public partial class EstiloForm : System.Web.UI.Page
    {
        /// <summary>
        /// Es el código de estilo
        /// </summary>
        private int EstiloId
        {
            get { return ViewState["RequestCodeEstilo"] == null ? -1 : (int)ViewState["RequestCodeEstilo"]; }
            set { ViewState["RequestCodeEstilo"] = value; }
        }

        /// <summary>
        /// Contiene la operación que se realizará en el formulario
        /// </summary>
        private AccionesForm Operacion
        {
            get { return ViewState["Operation"] == null ? AccionesForm.Consultar : (AccionesForm)ViewState["Operation"]; }
            set { ViewState["Operation"] = value; }
        } 
       

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!IsPostBack)
                {                    
                    errorMessage.Visible = false;

                    Master.ActualizaMenu(MenuPrincipal.Desarrollo, (int)MenuDesarrollo.Estilo);

                    Master.AgregarBreadcrumb("Estilos", "#", true);
                    Master.AgregarBreadcrumb("Listado", "EstiloList.aspx", false);
                    
                    int EstiloId = 0;

                    if (Request.QueryString["EstiloId"] != null && Int32.TryParse(Request.QueryString["EstiloId"], out EstiloId))
                    {
                        this.EstiloId = EstiloId;
                    }
                    else
                    {
                        this.EstiloId = -1;
                    }

                    EstablecerComportamiento();

                }
            }
            catch (Exception x)
            {
                lblErrorMessage.Text = x.Message;
                errorMessage.Visible = true;
            }
        }

        protected void btnGrabar_Click(object sender, EventArgs e)
        {
            try
            {
                Grabar();
                Response.Redirect("EstiloList.aspx");
            }
            catch (Exception x)
            {
                lblErrorMessage.Text = x.Message;
                errorMessage.Visible = true;
            }
        }

        protected void btnAtras_Click(object sender, EventArgs e)
        {
            Response.Redirect("EstiloList.aspx");
        }       

        /// <summary>
        /// Llena los mensajes de error de las validaciones del formulario.
        /// </summary>
        private void EstablecerValidaciones()
        {            
            reqDescripcion.ErrorMessage = Resources.MensajesValidacion.RequiredField;           
        }

        /// <summary>
        /// Prepara el formulario para la operación que se haya elegido (Agregar, Modificar o Consultar)
        /// </summary>
        private void EstablecerComportamiento()
        {
            int accion = 0;

            if (Request.QueryString["Operacion"] != null && Int32.TryParse(Request.QueryString["Operacion"].ToString(), out accion))
            {
                switch (accion)
                {
                    case (int)AccionesForm.Consultar:
                        this.Operacion = AccionesForm.Consultar;
                        leyendaForm.Text = Resources.Leyendas.FormConsultar;
                        Master.AgregarBreadcrumb("Consultar", "#", false);
                        LlenarDatosForm();
                        #region Inhabilita controles
                        txtDescripcion.Enabled = false;
                        clienteSearch.Enabled = false;
                        temporadaSearch.Enabled = false;
                        tipoPrendaSearch.Enabled = false;
                        grupoTallaSearch.Enabled = false;
                        txtEstiloCliente.Enabled = false;
                        
                        btnGrabar.Visible = false;
                        #endregion
                        break;
                    case (int)AccionesForm.Modificar:
                        this.Operacion = AccionesForm.Modificar;
                        leyendaForm.Text = Resources.Leyendas.FormModificar;
                        Master.AgregarBreadcrumb("Modificar", "#", false);
                        clienteSearch.EnabledTextBox = false;
                        temporadaSearch.EnabledTextBox = false;
                        tipoPrendaSearch.EnabledTextBox = false;
                        grupoTallaSearch.EnabledTextBox = false;
                        LlenarDatosForm();                       
                        EstablecerValidaciones();
                        break;
                    default:
                        this.Operacion = AccionesForm.Adicionar;
                        leyendaForm.Text = Resources.Leyendas.FormAdicionar;
                        Master.AgregarBreadcrumb("Adicionar", "#", false); 
                        clienteSearch.EnabledTextBox = false;
                        temporadaSearch.EnabledTextBox = false;
                        tipoPrendaSearch.EnabledTextBox = false;
                        grupoTallaSearch.EnabledTextBox = false;
                        EstablecerValidaciones();
                        txtFecha.Text = DateTime.Now.ToShortDateString();
                        break;
                }
            }         

        }

        /// <summary>
        /// Llena los datos del formulario con la información del estilo.
        /// </summary>        
        private void LlenarDatosForm()
        {
            TablasDataContext database = new TablasDataContext();

            var estilo = (from estilos in database.DE_Estilo
                           where estilos.Id == this.EstiloId
                           select estilos).First();

            if (estilo != null)
            {
                txtCodigo.Text = estilo.Id.ToString("00000");
                txtDescripcion.Text = estilo.Descripcion;
                clienteSearch.CodigoSeleccionado = estilo.Cliente_Id;
                clienteSearch.NombreSeleccionado = estilo.TG_Cliente.Nombre;
                temporadaSearch.CodigoSeleccionado = estilo.Temporada_Id;
                temporadaSearch.DescripcionSeleccionado = estilo.TG_Temporada.Descripcion;
                tipoPrendaSearch.CodigoSeleccionado = estilo.TipoPrenda_Id;
                tipoPrendaSearch.DescripcionSeleccionado = estilo.TG_TipoPrenda.Descripcion;
                grupoTallaSearch.CodigoSeleccionado = estilo.GruTal_Id;
                grupoTallaSearch.DescripcionSeleccionado = estilo.TG_GrupoTalla.GruTal_Descripcion;
                txtEstiloCliente.Text = estilo.CodigoCliente;
                txtFecha.Text = estilo.FechaRegistro.Value.ToShortDateString();
            }
            else
            {
                errorMessage.Visible = true;
                lblErrorMessage.Text = Resources.MensajesValidacion.NoDataFound;
            }
        } 

        private void Grabar()
        {
            switch (this.Operacion)
            {
                case AccionesForm.Adicionar:
                    Insertar();
                    break;
                case AccionesForm.Modificar:
                    Actualizar();
                    break;
                default:
                    lblErrorMessage.Text = Resources.MensajesValidacion.InvalidOperation;
                    errorMessage.Visible = true;
                    break;
            }
        }

        private void Actualizar()
        {
            TablasDataContext database = new TablasDataContext();

            DE_Estilo estilo = (from estilos in database.DE_Estilo
                                where estilos.Id == this.EstiloId
                                select estilos).First();

            estilo.Descripcion = txtDescripcion.Text;
            estilo.Cliente_Id = clienteSearch.CodigoSeleccionado;
            estilo.Temporada_Id = temporadaSearch.CodigoSeleccionado;
            estilo.TipoPrenda_Id = tipoPrendaSearch.CodigoSeleccionado;
            estilo.GruTal_Id = grupoTallaSearch.CodigoSeleccionado;
            estilo.CodigoCliente = txtEstiloCliente.Text;
            estilo.FechaRegistro = Convert.ToDateTime(txtFecha.Text);

            database.SubmitChanges();
        }

        private void Insertar()
        {
            TablasDataContext database = new TablasDataContext();

            DE_Estilo estilo = new DE_Estilo()
            {
                Descripcion = txtDescripcion.Text,
                Cliente_Id = clienteSearch.CodigoSeleccionado,
                Temporada_Id = temporadaSearch.CodigoSeleccionado,
                TipoPrenda_Id = tipoPrendaSearch.CodigoSeleccionado,
                GruTal_Id = grupoTallaSearch.CodigoSeleccionado,
                CodigoCliente = txtEstiloCliente.Text,
                FechaRegistro = Convert.ToDateTime(txtFecha.Text)
            };

            database.DE_Estilo.InsertOnSubmit(estilo);
            database.SubmitChanges();
        }
    }
}